iT邦幫忙

2021 iThome 鐵人賽

DAY 27
2
Arm Platforms

基於ARM-M0架構MCU之落摔檢測韌體開發系列 第 27

[DAY 27] _看門狗簡介_視窗看門狗(1)

  • 分享至 

  • xImage
  •  

STM看門狗有兩種,昨天講完其中一種,今天來看看WWDG(window watchdog)
這也是在各個MCU裡的參考手冊裡是單獨1個章節。

STM32有兩個看門狗,一個是獨立看門狗,一個是視窗看門狗。我們知道獨立看門狗的工作原理就是一個遞減計數器不斷的往下遞減計數,當減到0之前如果沒有喂狗的話,產生重置。
視窗看門狗跟獨立看門狗很類似,也是一個遞減計數器不斷的往下遞減計數,當減到一個固定值 0X40 時還不喂狗的話,產生重定,這個值叫視窗的下限,是固定的值不能改變這個是跟獨立看門狗類似的地方,不同的地方是視窗看門狗的計數器的值在減到某一個數之前喂狗的話也會產生重定,這個值叫視窗的上限,上限值由用戶獨立設置。視窗看門狗計數器的值必須在上限和下限之間才可以喂狗,這就是視窗看門狗與獨立看門狗的差別

看下列簡單的檢視會更好懂
獨立看門狗:重新裝載暫存器(RTL)>------------------------->0
到0之前都沒餵狗的話會重置系統

視窗看門狗:使用者設定的計數值(TL)>------>0x50(WR)>------>0x40(下限值)
TL暫存器為計數值WR為上限值,這兩者都由使用者自訂0x40為固定值,到0x50~0x40之前都沒餵狗的話會重置系統。

來看看WWDG視窗看門狗的內部框架圖吧,下圖是從參考手冊裡的截圖
https://ithelp.ithome.com.tw/upload/images/20211010/20141979lhB1dyzKYj.png

1.視窗看門狗時鐘

視窗看門狗時鐘來自 PCLK1,由 RCC 時鐘控制器開啟。

2.計數器時鐘

計數器時鐘由 CK 計時器時鐘經過預分頻器分頻得到,分頻係數由配置寄存器 CFR 的位 8:7 WDGTB[1:0]配置,可以是[0,1,2,3],其中 CK 計時器時鐘=PCLK1/4096,除以 4096是手冊規定的。所以計數器的時鐘 CNT_CK=PCLK1/4096/(2^WDGTB),這就可以算出計數器減一個數的時間 T= 1/CNT_CK = Tpclk1 * 4096 * (2^WDGTB)

3.計數器時鐘

視窗看門狗是一個7 bit遞減計數器,其值存在控制寄存器 CR 的位 6:0,即 T[6:0],當 7 個位全部為 1 時是 0X7F,這個是最大值,當遞減到 T6 位變成 0 時,即從0X40 變為 0X3F 時候,會產生看門狗復位。這個值 0X40 是看門狗能夠遞減到的最小值,所以計數器的值只能是: 0X40~0X7F 之間,實際上用來計數的是 T[5:0]。當遞減計數器遞減到 0X40 的時候,還不會馬上產生重置,如果使能了提前喚醒中斷: CFR 位 9 EWI 置 1,則產生提前喚醒中斷,如果真進入了這個中斷的話,就說明程式肯定是出問題了,那麼在中斷服務程式裡面我們就需要做最重要的工作,比如保存重要資料,或者報警等,這個中斷我們也叫它死前中斷。

4.看門口配置函式

我們知道視窗看門狗必須在計數器的值在一個範圍內才可以喂狗,其中下視窗的值是固定的 0X40,上視窗的值可以改變,具體的由配置寄存器CFR的位元6:0W[6:0]設置。其值必須大於 0X40,如果小於或者等於0X40就是失去了視窗的價值,而且也不能大於計數器的值,所以必須得小於0X7F。
那視窗值具體要設置成多大?這個得根據我們需要監控的程序的執行時間來決定。如果我們要監控的程式運行的時間為 Ta,當執行完這段程式之後就要進行喂狗,如果在視窗時間內沒有喂狗的話,那程式肯定是出問題了。
一般計數器的值TR設置成最大 0X7F,視窗值為 WR,計數器減一個數的時間為 T,那麼時間:(TR-WR)*T 應該稍微大於Ta即可,這樣就能做到剛執行完程式之後喂狗,起到監控的作用,這樣也就可以算出 WR 的值是多少。

今天先看到這,明天再來看看如何計算看們狗的超時時間和怎麼實驗這WWDG。


上一篇
[DAY 26] _STM32 看門狗簡介_獨立看門狗(2)
下一篇
[DAY 28] _看門狗簡介_視窗看門狗(2)
系列文
基於ARM-M0架構MCU之落摔檢測韌體開發35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言